package com.bookstore.back.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 图书实体类
 * 
 * @author 程序猿_Ti
 * @since 2025-07-19
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("book")
public class Book implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 图书ID
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    /**
     * 图书标题
     */
    @TableField("title")
    private String title;

    /**
     * 作者
     */
    @TableField("author")
    private String author;

    /**
     * 出版社
     */
    @TableField("publisher")
    private String publisher;

    /**
     * ISBN编号
     */
    @TableField("isbn")
    private String isbn;

    /**
     * 出版日期
     */
    @TableField("publish_date")
    private LocalDate publishDate;

    /**
     * 售价
     */
    @TableField("price")
    private BigDecimal price;

    /**
     * 原价
     */
    @TableField("original_price")
    private BigDecimal originalPrice;

    /**
     * 主分类ID
     */
    @TableField("category_id")
    private Integer categoryId;

    /**
     * 页数
     */
    @TableField("pages")
    private Integer pages;

    /**
     * 装帧方式
     */
    @TableField("binding")
    private String binding;

    /**
     * 封面图URL
     */
    @TableField("cover")
    private String cover;

    /**
     * 图书简介
     */
    @TableField("description")
    private String description;

    /**
     * 作者简介
     */
    @TableField("author_bio")
    private String authorBio;

    /**
     * 评分
     */
    @TableField("rating")
    private BigDecimal rating;

    /**
     * 评论数
     */
    @TableField("review_count")
    private Integer reviewCount;

    /**
     * 销量
     */
    @TableField("sales")
    private Integer sales;

    /**
     * 库存
     */
    @TableField("stock")
    private Integer stock;

    /**
     * 状态：0-下架 1-上架
     */
    @TableField("status")
    private Integer status;

    /**
     * 创建时间
     */
    @TableField(value = "created_at", fill = FieldFill.INSERT)
    private LocalDateTime createdAt;

    /**
     * 更新时间
     */
    @TableField(value = "updated_at", fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updatedAt;

    /**
     * 关联的标签列表（不对应数据库字段）
     */
    @TableField(exist = false)
    private List<BookTag> tags;

    /**
     * 标签ID列表（用于前端传递，不对应数据库字段）
     */
    @TableField(exist = false)
    private List<Integer> tagIds;

}
